package leetcode41_50;

import org.junit.Test;

/**
 * @author shhjiang_001
 * @create 2020-06-17 20:24
 */

        /*
        给定一个非负整数数组，你最初位于数组的第一个位置。
        数组中的每个元素代表你在该位置可以跳跃的最大长度。
        你的目标是使用最少的跳跃次数到达数组的最后一个位置。
        示例:

        输入: [2,3,1,1,4]
        输出: 2
        解释: 跳到最后一个位置的最小跳跃数是 2。
        从下标为 0 跳到下标为 1 的位置，跳 1 步，然后跳 3 步到达数组的最后一个位置。
        */


public class Solution45 {
    int res = 0;
    public int jump(int[] nums) {
        if (nums.length==1) return 0;
        method(nums,0);
        return res;
    }

    private void method(int[] nums, int pos) {
        if (nums[pos]+pos >= nums.length-1) {
            res++;
            return;
        }
        int incr = 0;
        int nextPose = pos;
        for (int i =1;i <= nums[pos];i++){
            if (pos+i >= nums.length) {
                nextPose = pos+i;
                break;
            }
            if (nums[pos+i]+i > incr){
                incr = nums[pos+i]+i;
                nextPose = pos + i;
            }
        }
        res++;
        if (nextPose >= nums.length-1 ){
            return;
        }
        method(nums,nextPose);
    }
    @Test
    public void test() {
        Solution45 solution45 = new Solution45();
//        System.out.println(Arrays.asList(new int[]{1, 2, 3}).toString());
        int trap = solution45.jump(new int[]{2,3,1,1,4});
        System.out.println(trap);
    }

}
